home *** CD-ROM | disk | FTP | other *** search
/ Mac Power 1997 December / MACPOWER-1997-12.ISO.7z / MACPOWER-1997-12.ISO / AMUG / PROGRAMMING / Raven 1.2.sit / Raven 1.2 / Source / Foundation / OS / ZRegion.h < prev    next >
Text File  |  1996-10-28  |  4KB  |  148 lines

  1. /*
  2.  *  File:       ZRegion.h
  3.  *  Summary:       RgnHandle wrapper.
  4.  *  Written by: Jesse Jones
  5.  *
  6.  *  Copyright ゥ 1996 Jesse Jones. 
  7.  *    For conditions of distribution and use, see copyright notice in ZTypes.h  
  8.  *
  9.  *  Change History (most recent first):    
  10.  *
  11.  *         <->     1/28/96    JDJ        Created
  12.  */
  13.  
  14. #pragma once
  15.  
  16. #include <QuickDraw.h>
  17.  
  18. #include <ZGeometry.h>
  19.  
  20.  
  21. // ===================================================================================
  22. //    class TRegion
  23. // ===================================================================================
  24. class TRegion {
  25.  
  26. //-----------------------------------
  27. //    Initialization/Destruction
  28. //
  29. public:
  30.                         ~TRegion();
  31.         
  32.                         TRegion();
  33.                         
  34.                         TRegion(const TRegion& rgn);
  35.                         
  36.                         TRegion(RgnHandle rgn);
  37.                         
  38.                         TRegion(const TRect& rect);
  39.                     
  40.                         TRegion(const TPoint& pt, const TSize& size);
  41.                     
  42.                         TRegion(const TPoint* vertices, short count);
  43.                         // Builds a region from an array of count vertices.
  44.         
  45. //-----------------------------------
  46. //    Conversion operators
  47. //
  48. public:
  49.                         operator RgnHandle() const                {return mRgn;}
  50.  
  51. //-----------------------------------
  52. //    Assignment
  53. //
  54. public:
  55.             TRegion&     operator=(const TRegion& rgn);
  56.             TRegion&     operator=(const TRect& rect);
  57.     
  58.             TRegion&     operator+=(const TRegion& rgn);
  59.             TRegion&     operator+=(const TRect& rect);
  60.             TRegion&     operator+=(const TPoint& offset);
  61.         
  62.             TRegion&     operator-=(const TRegion& rgn);
  63.             TRegion&     operator-=(const TRect& rect);
  64.             TRegion&     operator-=(const TPoint& offset);
  65.             
  66.             TRegion&     operator&=(const TRegion& rgn);
  67.             TRegion&     operator&=(const TRect& rect);
  68.             
  69.             TRegion&     operator^=(const TRegion& rgn);
  70.             TRegion&     operator^=(const TRect& rect);
  71.     
  72. //-----------------------------------
  73. //    Arithmetic
  74. //
  75. public:
  76.     friend     TRegion     operator+(const TRegion& rgn1, const TRegion& rgn2);    
  77.     friend     TRegion     operator+(const TRegion& rgn, const TRect& rect);
  78.     friend     TRegion     operator+(const TRect& rect, const TRegion& rgn);
  79.  
  80.     friend     TRegion     operator-(const TRegion& rgn1, const TRegion& rgn2);    
  81.     friend     TRegion     operator-(const TRegion& rgn, const TRect& rect);            
  82.     friend     TRegion     operator-(const TRect& rect, const TRegion& rgn);
  83.  
  84.     friend     TRegion     operator&(const TRegion& rgn1, const TRegion& rgn2);    
  85.     friend     TRegion     operator&(const TRegion& rgn, const TRect& rect);
  86.     friend     TRegion     operator&(const TRect& rect, const TRegion& rgn);
  87.     
  88.     friend     TRegion     operator^(const TRegion& rgn1, const TRegion& rgn2);    
  89.     friend     TRegion     operator^(const TRegion& rgn, const TRect& rect);
  90.     friend     TRegion     operator^(const TRect& rect, const TRegion& rgn);
  91.     
  92.             void         MakeEmpty();
  93.  
  94. //-----------------------------------
  95. //    Moving
  96. //
  97. public:
  98.     friend     TRegion     operator+(const TRegion& rgn, const TPoint& offset);
  99.     friend     TRegion     operator-(const TRegion& rgn, const TPoint& offset);
  100.     
  101.             void         MoveTo(const TPoint& pt);
  102.                         // Moves region so that origin is at pt.
  103.     
  104. //-----------------------------------
  105. //    Scaling
  106. //
  107. public:
  108.             void         Inset(short dx, short dy)                        {::InsetRgn(mRgn, dx, dy);}
  109.             void         Inset(const TPoint& delta)                        {::InsetRgn(mRgn, delta.h, delta.v);}
  110.             
  111.             void         Map(const TRect& srcRect, const TRect& dstRect);
  112.                         // Scales the region by the ratio of the sizes of srTRect and 
  113.                         // dstRect. Also moves the region to a location within dstRect 
  114.                         // similiar to its position within srTRect.
  115.         
  116. //-----------------------------------
  117. //    Comparison
  118. //
  119. public:
  120.     friend     bool         operator==(const TRegion& rgn1, const TRegion& rgn2);
  121.     friend     bool         operator==(const TRegion& rgn, const TRect& rect);
  122.     friend     bool         operator==(const TRect& rect, const TRegion& rgn);
  123.  
  124.     friend     bool         operator!=(const TRegion& rgn1, const TRegion& rgn2);
  125.     friend     bool         operator!=(const TRegion& rgn, const TRect& rect);
  126.     friend     bool         operator!=(const TRect& rect, const TRegion& rgn);
  127.     
  128. //-----------------------------------
  129. //    Inquiry
  130. //
  131. public:
  132.             bool        IsEmpty() const                                    {return EmptyRgn(mRgn);}
  133.     
  134.             TRect         GetEnclosingRect() const                        {return (**mRgn).rgnBBox;}
  135.                         // Returns a rectangle completely enclosing the region.
  136.                 
  137.             bool         Contains(const TPoint& pt) const                {return ::PtInRgn(pt, mRgn);}
  138.             
  139.             bool         Intersects(const TRect& rect) const                {return ::RectInRgn(rect, mRgn);}
  140.     
  141. //-----------------------------------
  142. //    Member data
  143. //
  144. private:
  145.     RgnHandle    mRgn;
  146. };
  147.  
  148.